#pragma once

#include "algorithms/ApproxAlgorithm.h"
#include "File.h"
#include "Printer.h"
#include "TaskLauncher.h"

#include <vector>
#include <memory>

#include "types.h"

class Executor {
public:

    Executor(const std::shared_ptr<TaskLauncher>& launcher,
             const std::shared_ptr<Printer>& printer);

    FilePairsType run(std::function<AlgResultType(const FilePairType&)> func,
                      const FilePairsType& input_pairs);

private:

    std::shared_ptr<TaskLauncher> launcher_; 
    std::shared_ptr<Printer> printer_;
};
